<?php

class paginacao {

    protected $qtde_registros = NULL;
    protected $registros_por_pagina = 10;
    
    // primeira página é 1
    protected $pagina_solicitada = 1;
    protected $qtde_paginas;




    public function setQtdeTotalRegistros($qtde_registros) {
        $this->qtde_registros = $qtde_registros;
    }

    public function setQtdeRegistrosPorPagina($registrosPorPagina) {
        $this->registros_por_pagina = $registrosPorPagina;
    }

    // primeira página: 1
    public function setPagina($pagina) {

        if ($pagina > $this->getQtdePaginas()) {
            // a página solicitada não existe.
            throw new PaginaNaoExisteException;
        }
        $this->pagina_solicitada = $pagina;
    }

    /**
     *
     * retorna a quantidade de páginas disponíveis
     */
    public function getQtdePaginas() {

        // não definiu a quantidade de registros.
        if ($this->qtde_registros === NULL) {
            throw new QtdeRegistrosNotDefinedException;
        }

        $this->qtde_paginas = ceil($this->qtde_registros / $this->registros_por_pagina);

        return $this->qtde_paginas;
    }

    /**
     *
     * retorna a quantidade de registros na página especificada.
     */
    public function getQtdeRegistrosPagina($pagina) {


        if ($pagina == 0 || $pagina > $this->getQtdePaginas()) {
            // a página solicitada não existe.
            throw new PaginaNaoExisteException;
        }

        if ($pagina < $this->getQtdePaginas()) {
            return $this->registros_por_pagina;
        }


        // última página:
        for ($i = 0, $j = 1; $i < $this->qtde_registros - $this->registros_por_pagina + 1; $i += $this->registros_por_pagina, $j++) { }

        if ($i == $this->qtde_registros) {
            return $this->registros_por_pagina;
        }
        
        $resultado = $this->qtde_registros - $i;
        return $resultado;
    }
}

class PaginaNaoExisteException extends Exception { }
class QtdeRegistrosNotDefinedException extends Exception { }




$p = new paginacao();
$p->setQtdeTotalRegistros(5);
$p->setQtdeRegistrosPorPagina(5);

// quantidade de ítens na última página:
echo $p->getQtdeRegistrosPagina($p->getQtdePaginas());


?>